<?php

if (!defined('IN_ECS'))
{
	die('Hacking attempt');
}
 
$payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/ChinaPay.php';
include_once(ROOT_PATH ."includes/modules/payment/chinapay/netpayclient_config.php");
include_once(ROOT_PATH ."includes/modules/payment/chinapay/netpayclient.php");
 
if (file_exists($payment_lang))
{
	global $_LANG;
	include_once($payment_lang);
}
 
/* 模块的基本信息 */

if (isset($set_modules) && $set_modules == TRUE)

{
	$i = isset($modules) ? count($modules) : 0;
 
	/* 代码 */
	$modules[$i]['code'] = basename(__FILE__, '.php');
 
	/* 描述对应的语言项 */
	$modules[$i]['desc'] = 'chinapay_desc';
 
	/* 是否支持货到付款 */
	$modules[$i]['is_cod'] = '0';
 
	/* 是否支持在线支付 */
	$modules[$i]['is_online'] = '1';
 
	/* 支付费用 */
	$modules[$i]['pay_fee'] = '1.5%';
 
	/* 作者 */
	$modules[$i]['author'] = 'flsm';
 
	/* 网址 */
	$modules[$i]['website'] = 'http://www.chinapay.com';
 
	/* 版本号 */
	$modules[$i]['version'] = '1.0.0';
 
	/* 配置信息 */
	$modules[$i]['config'] = array(
	array('name' => 'chinapay_account', 'type' => 'text', 'value' => ''),
	array('name' => 'chinapay_merkey_file', 'type' => 'text', 'value' => ''),
	array('name' => 'chinapay_pubkey_file', 'type' => 'text', 'value' => '')
	);
 
	return;
}
 
/**
 * 类
 */
class chinapay
{
	/**
	 * 构造函数
	 * @access public
	 * @param
	 * @return void
	 */
	function __construct()
	{
		$this->chinapay();
	}
	
	function chinapay()
	{
	}
 
	
	/**
	 * 生成支付代码
	 * @param array $order 订单信息
	 * @param array $payment 支付方式信息
	 */
function get_code($order, $payment)
{
	$time = gmtime();
	$MerId = trim($payment['chinapay_account']);
	$OrdId = ecshopsn2chinapaysn($order['order_sn'],$MerId);
	$TransAmt = formatamount($order['order_amount']);
// 	$TransAmt = formatamount(1.01);
	$TransTime = local_date('His',$time);
	$CuryId = '156'; 
	$TransDate = local_date('Ymd',$time);
	$TransType = '0001'; 
	$Version = '20080515';
	$Priv1 = '1|0|0|0|'.$OrdId;
	$Priv2 = 'testpriv2';
	$GateId = '';
	$CountryId = '0086';
	$TimeZone = '+08';
	$DSTFlag = '1';
	$ExtFlag = '00';
	$asyn_returnurl = return_url(basename(__FILE__, '.php'));
	$data_vreturnurl = $asyn_returnurl.'?type=syn';
	
	$merkey_file= trim($payment['chinapay_merkey_file']);
	//导入私钥文件, 返回值即为您的商户号，长度15位
	$merid = buildKey(ROOT_PATH . $merkey_file);
// 	echo $merid;
	if(!$merid) {
		echo "导入私钥文件失败！";
		exit;
	}
 
	//按次序组合订单信息为待签名串
// 	$plain = $MerId . $OrdId . $TransAmt . $CuryId . $TransDate .  $TransType.  $Priv1;
			/* MerId	OrdId	TransAmt	CuryId	TransDate	TransTime	TransType	CountryId	TimeZone	DSTFlag	ExtFlag	Priv1 */
	$plain = $MerId . $OrdId . $TransAmt . $CuryId . $TransDate . $TransTime . $TransType. $CountryId . $TimeZone . $DSTFlag . $ExtFlag . $Priv1;
	//生成签名值，必填
// 	echo $plain;
// 	$chkvalue = $plain;
	$chkvalue = sign($plain);
	if (!$chkvalue) {
		echo "签名失败！";
		exit;
	}
	
	//修改支付单号
// 	$sql = "UPDATE ".$GLOBALS['ecs']->table('order_info').
// 	" SET ".
// 	" pp_sn='$OrdId' ".
// 	" WHERE order_id=".$order['order_id'];
// 	$GLOBALS['db']->query($sql);
	
	$def_url = "<br /><form style='text-align:center;' onsubmit='return setPpsn(\"".$OrdId."\",".$order['order_id'].");' method=post action='".REQ_URL_PAY."' target='_blank'>";

	$def_url .= '<input type=hidden name="MerId" value="'.$MerId.'"/>';// （MerId为ChinaPay统一分配给商户的商户号，15位长度，必填）
	$def_url .= '<input type=hidden name="OrdId" value="'.$OrdId.'"/>';// （商户提交给ChinaPay的交易订单号，16位长度，必填）
	$def_url .= '<input type=hidden name="TransAmt" value="'.$TransAmt.'"/>';// （订单交易金额，12位长度，左补0，  必填,金额附带2位小数）
	$def_url .= '<input type=hidden name="CuryId" value="'.$CuryId.'"/>'; //（订单交易币种，3位长度， 国际英文简写规则   必填,例如：JPY是日元简写，USD是美元简写，人民币取值为“156”）
	$def_url .= '<input type=hidden name="CountryId" value="'.$CountryId.'"/>';// （国家代码，4位长度，电话代码编码，必填）
	$def_url .= '<input type=hidden name="TransDate" value="'.$TransDate.'"/>';//（订单交易日期，8位长度，必填）
	$def_url .= '<input type=hidden name="TransType" value="'.$TransType.'"/>'; //（交易类型，4位长度，必填）
	$def_url .= '<input type=hidden name="Version" value="'.$Version.'"/>';// （支付接入版本号，必填）
	$def_url .= '<input type=hidden name="BgRetUrl" value="'.$data_vreturnurl.'"/>'; //（后台交易接收URL，长度不要超过80个字节，必填）
	$def_url .= '<input type=hidden name="PageRetUrl" value="'.$asyn_returnurl.'"/>';// （页面交易接收URL，长度不要超过80个字节，必填）
	$def_url .= '<input type=hidden name="GateId" value="">';//（支付网关号，可选）
	$def_url .= '<input type=hidden name="Priv1" value="'.$Priv1.'">';//（二级商户交易明细，长度不要超过60个字节，具体格式参见下方“说明”）
	$def_url .= '<input type=hidden name="TimeZone" value="'.$TimeZone.'">';//（东时区表示为正，西时区表示为负，长度3个字节，必填）
	$def_url .= '<input type=hidden name="TransTime" value="'.$TransTime.'">';//（交易提交时间，长度为6个字节，必填）
	$def_url .= '<input type=hidden name="DSTFlag" value="'.$DSTFlag.'">';//（夏令时标志，1为夏令时，0不为夏令时，必填）
	$def_url .= '<input type=hidden name="ExtFlag" value="'.$ExtFlag.'">';//（境外商户标志，默认为00，必填）
	$def_url .= '<input type=hidden name="Priv2" value="'.$Priv2.'">';//（商户私有域段2，最长长度为200个字节，可选）
	$def_url .= '<input type=hidden name="ChkValue" value="'.$chkvalue.'">';//（256字节长的ASCII码,为此次交易提交关键数据的数字签名，必填）
	$def_url .= "<input type=submit value='" .$GLOBALS['_LANG']['pay_button']. "'>";
	
	$def_url .= "</form>";
	$def_url .= '<p style="font-size: 14px; color: red; margin-top: 5px;">温馨提示：建议使用IE浏览器；请您在银行网银页面支付成功后，按照页面提示跳转回本网站，保证网站及时收到扣款成功应答</p>';
	
	return $def_url;
}
 
/**
 * 响应操作
 */
function respond()
{
	
	$payment = get_payment(basename(__FILE__, '.php'));
 
	$merid = trim($_POST['merid']);
	$orderno = trim($_POST['orderno']);
	$transdate = trim($_POST['transdate']);
	$amount = trim($_POST['amount']);
	$currencycode = trim($_POST['currencycode']);
	$transtype = trim($_POST['transtype']);
	$status = trim($_POST['status']);
	$checkvalue = trim($_POST['checkvalue']);
	$v_gateid = trim($_POST['GateId']);
	$v_Priv1 = trim($_POST['Priv1']);
// 	print_r($_POST);
	$type = trim($_GET['type']);
	
	/**
	 * 重新计算密钥的值
	 */
	$pubkey = $payment['chinapay_pubkey_file'];
	
	$PGID = buildKey(ROOT_PATH . $pubkey);
	if(!$PGID) 
	{
		echo "导入公钥文件失败！";
		exit;
	}
// 	$plain = $merid . $orderno . $amount . $currencycode . $transdate . $transtype . $status . $checkvalue;

// 	$verify  =  verify($plain, $checkvalue);
	$verify = verifyTransResponse($merid, $orderno, $amount, $currencycode, $transdate, $transtype, $status, $checkvalue);
	
	if (!$verify) 
	{
		echo "验证签名失败！";
		exit;
	}
	
	/* 检查秘钥是否正确 */
	if ($status == '1001') 
	{
		if ($type=='syn')
		{
			$v_ordesn = chinapaysn2ecshopsn($orderno);
			$sql = "SELECT order_id,zz_status FROM ".$GLOBALS['ecs']->table('order_info')." WHERE order_sn='$v_ordesn' AND pay_status=".PS_UNPAYED;
			$res = $GLOBALS['db']->getRow($sql);
			if ($res['order_id'] <= 0){
// 				return false;
			}
			/* 改变订单状态 */
// 			order_paid($order_id);
			$sql = "UPDATE ".$GLOBALS['ecs']->table('order_info').
					" SET pay_status = ".PS_PAYED.", ".
					" pay_time = '".gmtime()."', ".
					" money_paid = order_amount, " .
					" order_amount = 0 ".
					" WHERE order_id=".$res['order_id'];
			$GLOBALS['db']->query($sql);
			
			/* 记录订单操作记录 */
			order_action($v_ordesn, OS_CONFIRMED, SS_UNSHIPPED, PS_PAYED, $note, $GLOBALS['_LANG']['buyer']);
			/* 0204 计算未支付订单的行邮税 */
// 			calculate_all_post_tax($_SESSION['user_id']);
			
			/* 0308 商品冻结数 */
			add_goods_frozen($res['order_id']);

			
			if ($res['zz_status'] == ZZ_NOTPUSH)
			{

				// 		if (create_cus_xml(0,$v_ordesn))
				// 		{
				// 			$GLOBALS['db']->query("UPDATE ".$GLOBALS['ecs']->table('order_info')." SET cus_status=".CUS_WAIT." WHERE order_sn='$v_ordesn'");
				// 			push_log($v_ordesn, 1, '等待海关回执', '', '', '',2);
				// 		}
					
					
// 				if (create_ciq_xml(0,$v_ordesn))
// 				{
// 					$GLOBALS['db']->query("UPDATE ".$GLOBALS['ecs']->table('order_info')." SET ciq_status=".CIQ_WAIT." WHERE order_sn='$v_ordesn'");
// 					push_log($v_ordesn, 1, '等待国检回执', '', '', '',2);
// 				}
			}
			
		}
		
		
		return true;
	}
	else
	{
		return false;
	}
	
}

}
 
/*
 *本地订单号转为银联订单号
 */
function ecshopsn2chinapaysn($order_sn, $vid)
{
	if($order_sn && $vid)
	{
// 		$sub_vid = substr($vid, 10, 5);
		$sub_vid = str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
		$sub_start = substr($order_sn, 2, 4);
		$sub_end = substr($order_sn, 6);
		$temp = @$pay_id; //屏蔽错误提示
		return $sub_start . $sub_vid . $sub_end;
	}

}
 
/*
 *银联订单号转为本地订单号
 */
function chinapaysn2ecshopsn($chinapaysn)
{
	if($chinapaysn)
	{ 
		$year = date('Y',time());
		return substr($year,0,2) . substr($chinapaysn, 0, 4) . substr($chinapaysn, 9) ;
	}
}
 
/*
 *格式化交易金额，以分位单位的12位数字。
 */
function formatamount($amount)
{
	if($amount){
		if(!strstr($amount, "."))
		{
			$amount = $amount.".00";
		}
		$amount = str_replace(".", "", $amount);
		$temp = $amount;
		for($i=0; $i< 12 - strlen($amount); $i++)
		{
			$temp = "0" . $temp;
		}
		return $temp;
	}
}
?>